import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession

object rik9 {
  def main(args: Array[String]): Unit = {
//    1）、编写Spark代码，读取所有日志数据，进行ETL转换操作，并注册为临时试图，显示数据量和前10条样本数据；（15分）
    var spark=SparkSession.builder().appName("app").master("local[*]").getOrCreate()
    var data=spark.read.textFile("hdfs://hadoop102/weblog/rik9.log")
    data.show(10)
//    2）、编写Spark代码，读取所有日志数据，进行ETL转换操作，并注册为临时试图，显示数据量和前10条样本数据；（15分）
    data.createOrReplaceTempView("rik9")
    spark.sql(
      """
        |select * from rik9
        |""".stripMargin).show(10)
//   3) 、业务1：统计每天PV浏览量，编写SparkSQL，展示结果；（10分）
    spark.sql(
      """
        |select
        |request_url,
        |count(*) pv
        |from rik9 group by request_url
        |""".stripMargin).show(10)
//    4）、业务2：统计每天注册用户数，编写SparkSQL，展示结果；（10分）
    spark.sql(
      """
        |select
        |mid,
        |count(*) us
        |from rik9 group by mid
        |""".stripMargin).show(10)
    //5）、业务3：统计每天独立IP数，编写SparkSQL，展示结果；（10分）
    spark.sql(
      """
        |select
        |ip,
        |count(*) dl
        |from rik9 group by ip
        |""".stripMargin).show(10)
    //6）、业务4：统计跳出用户数和跳出率，编写SparkSQL，展示结果；（15分）
    spark.sql(
      """
        |select
        |request,
        |count(*)/count(userid) dc
        |from rik9 group by request
        |""".stripMargin).show(10)
    //7）、业务5：使用SparkSQL将上述统计指标合并，展示结果；（10分）

    //8）、将业务5结果保存到MySQL数据库表中，并查询是否保存成功；（20分）
    spark.write
      .format("jdbc")
      .option("url", "jdbc:mysql:3306")
      .option("dbtable", "rik9")
      .option("user", "root")
      .option("password", "123456")
      .save()

  }
}
